using System;
using System.Collections.Generic;
using System.Text;

namespace RRHH.Competencias.Entities.AdminPermisos
{
    /// <summary>
    /// Representa el permiso dado a un usuario, para que pueda acceder a determinada funcion de un sistema
    /// </summary>
    public class Permiso
    {
        private Usuario usuario;  
        private Funcion funcion;
        private DateTime fechaAlta;
        private Usuario usuarioAlta;
        private DateTime fechaBaja;
        private Usuario usuarioBaja;

        public Permiso()
        {
            this.fechaAlta = DateTime.Now;
        }
        public Permiso(Usuario usuario, Funcion funcion)
        {
            this.usuario = usuario;
            this.funcion = funcion;
        }

        public Usuario Usuario
        {
            get { return usuario; }
            set { usuario = value; }
        }

        public Funcion Funcion
        {
            get { return funcion; }
            set { funcion = value; }
        }

        public DateTime FechaAlta
        {
            get { return fechaAlta; }
            set { fechaAlta = value; }
        }

        public Usuario UsuarioAlta
        {
            get { return usuarioAlta; }
            set { usuarioAlta = value; }
        }

        public DateTime FechaBaja
        {
            get { return fechaBaja; }
            set { fechaBaja = value; }
        }

        public Usuario UsuarioBaja
        {
            get { return usuarioBaja; }
            set { usuarioBaja = value; }
        }

        public long UsuarioID
        { 
            get
            {
                if (usuario != null) return usuario.Id;
                return 0;
            }
        }

        public string UsuarioDescripcion
        {
            get
            {
                if (usuario != null) return usuario.Descripcion;
                return string.Empty;
            }
        }

        public long FuncionID
        {
            get
            {
                if (funcion != null) return funcion.Id;
                return 0;
            }
        }

        public string FuncionDescripcion
        {
            get
            {
                if (funcion != null) return funcion.Descripcion;
                return string.Empty;
            }
        }

        
        public override bool Equals(object obj)
        {
            if (obj == null) return false;

            Permiso comparar = (Permiso)obj;
            if (usuario.Equals(comparar.usuario) && funcion.Equals(comparar.Funcion)) return true;
            return false;
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
    }
}
